<?php

declare( strict_types = 1 );

namespace App\Common\Model\Base\DataUnit;

use App\Common as com;
use App\Common\Model\Base as nameBase;
use App\Common\Model\Base\DataUnit as nameDataUnit;

class GetData extends nameDataUnit\Base {

	/**
	 * 魔术方法->call
	 * @param string $name 方法名
	 * @param array $arguments 参数[]
	 * @return mixed
	 * @throws
	 */
	public function __call( string $name, array $arguments ) {
		// 取动作类型
		$action = substr( $name, 0, 3 );
		// 处理属性读写
		switch( $action ){
			case 'get':
				return $this->__magicCallOfGet( $name, $arguments );
			default:
				throw com\Lib\Err\Exception::makeOfNew( '', com\Cla\Err\Code::$sysFunExecuteError );
		}
	}

	/**
	 * 魔术方法->call->get(处理属性读写)
	 * @param string $name 方法名
	 * @param array $arguments 参数
	 * @return mixed||Exception 返回数据(如无法处理则抛出异常:com\Cla\Err\Code::$sysDataErrorSeverity)
	 */
	protected function __magicCallOfGet( string $name, array $arguments ){
		// 取出属性名
		$propertyName = substr( $name, 3 );
		$propertyName = com\Lib\Fun\Str::parseName( $propertyName, 1, false );
		//
		$default = $arguments[0] ?? null;
		//
		return $this->getDataUnit()->goDataset()->get( $propertyName, $default );
	}

}
